# Maintainer: David Runge <dvzrv@archlinux.org>
# Contributor: Gaetan Bisson <bisson@archlinux.org>
# Contributor: Jeff Brodnax <tullyarcher@bellsouth.net>
# Contributor: Paul Mattal <paul@archlinux.org>

pkgbase=postfix
pkgname=('postfix' 'postfix-cdb' 'postfix-ldap' 'postfix-lmdb' 'postfix-mysql'
'postfix-pcre' 'postfix-pgsql' 'postfix-sqlite')
pkgver=3.6.2
pkgrel=2
url="http://www.postfix.org/"
pkgdesc='Fast, easy to administer, secure mail server'
license=('EPL')
arch=('x86_64')
depends=('glibc')
makedepends=('db' 'icu' 'libldap' 'libnsl' 'libsasl' 'lmdb' 'mariadb-libs'
'openssl' 'pcre' 'postgresql-libs' 'sqlite' 'tinycdb' 'zlib')
source=("https://de.postfix.org/ftpmirror/official/${pkgname}-${pkgver}.tar.gz"
        "${pkgname}-${pkgver}.tar.gz.sig::https://de.postfix.org/ftpmirror/official/${pkgname}-${pkgver}.tar.gz.gpg2"
        "${pkgname}-3.5.8-main_defaults.patch"
        "${pkgname}.service"
        "${pkgname}.sysusers"
        "${pkgname}.tmpfiles"
)
sha512sums=('464ce9ec77e637ede91123472a0383b2bfda52102f9e9852c7191016d4fda2e14f302f2db9793887c182688c2a14dde6eeda728523196a627a8028f99555a4d9'
            'SKIP'
            '7b2785aa8120ca3ff91b405baf675e9e11f8d58b18a9b842672e7ae30932febddac10556a70823d8746fcb160bceb4dbabdee45cf46b02fc0127057656fb85c4'
            '27f54747ad480d65b560c9dbc97e12c6353e4bceca0ffe3e358e31de56db0ad79928164c9f8790c73a9f791daa378253d2ee29b5a766661778553ec889b2cf97'
            'a7f15970f613ae7b98ce1b84ca0a6034ce3cc7b2b9ce7160dad9731f740fb762f4a54f44acceb5f06f8744fa9e952b088086af8a69da388a600b742a3cda37f2'
            'd08574a6acd595fc146513c92dc1bb341c3432d67de1e93ab73a7ce60e385dd34f3a55e3d3d7aec5f358ac4aae260f028599ac47650ebc663cea3043a760a7bc')
b2sums=('349f3eb2995fe72c89e374a2f95cbb09d4a4f5a5c896e340a2a166ffcb2c498ba514022a59a17d2731807f6dadc03f804a3d4b16127dd2d6addb825558b7ffd6'
        'SKIP'
        'b5f19e0619f1fb017cd889c14e341c21146b3afe7b9eefcdb7fb1eb83a357434b899d1e92f3ab0023c78ef8f2de6ae54c4599ee0f0bd04d257f4ca0a4dc9a16c'
        '02dd441cf6e4a7c2bc0de876f020b0784d811f77a5c6102dd075d67b07158dbc53c8b4d62bc8035283d4f349008574b1c3fac03f4519d56ffd809cb5bcfb7bea'
        'db58b7deb24cea16fb84f56680f0000683f72e11a95039969878e3819607aad5e65af9d9f50007e7710609065c0e3ebb9b30c1d929162b74eca5e74434d82cf1'
        'de31693cea5f452a9c8c0d1cf5210a6e67c0176f8b1a4d74106f2e803911569e9fdbb2301b3b5dc7ad6a6da285026b1a3ed3de52117d216b030cf0d92348909d')
validpgpkeys=('622C7C012254C186677469C50C0B590E80CA15A7') # Wietse Venema <wietse@porcupine.org>

prepare() {
  cd "${pkgbase}-${pkgver}"
  # add distribution defaults to main.cf (alias_maps and alias_database)
  patch -Np1 -i ../"${pkgbase}-3.5.8-main_defaults.patch"

  # create work directories for split package configuration
  mkdir -vp dynamicmaps.cf.d "${pkgbase}-files.d"
}

build() {
  local _ccargs=(
    '-fPIC' '-fcommon'
    '-DUSE_SASL_AUTH'
    '-DUSE_CYRUS_SASL' '-I/usr/include/sasl'
    '-DHAS_LDAP'
    '-DUSE_LDAP_SASL'
    '-DHAS_LMDB'
    '-DUSE_TLS'
    '-DHAS_MYSQL' '-I/usr/include/mysql'
    '-DHAS_PGSQL' '-I/usr/include/postgresql'
    '-DHAS_SQLITE'
    '-DHAS_CDB'
    '-DDEF_COMMAND_DIR=\"/usr/bin\"'
    '-DDEF_DAEMON_DIR=\"/usr/lib/postfix/bin\"'
    '-DDEF_SENDMAIL_PATH=\"/usr/bin/sendmail\"'
    '-DDEF_README_DIR=\"/usr/share/doc/postfix\"'
    '-DDEF_MANPAGE_DIR=\"/usr/share/man\"'
  )

  cd "${pkgbase}-${pkgver}"
  # NOTE: descriptions of variables in makedefs
  make makefiles \
    DEBUG='' \
    pie=yes \
    shared=yes \
    dynamicmaps=yes \
    CCARGS="${_ccargs[*]}" \
    AUXLIBS="$(pkgconf --libs openssl libsasl2) -lnsl" \
    AUXLIBS_LDAP='-lldap -llber' \
    AUXLIBS_LMDB="$(pkgconf --libs lmdb)" \
    AUXLIBS_PCRE="$(pkgconf --libs pcre)" \
    AUXLIBS_MYSQL="$(pkgconf --libs mariadb)" \
    AUXLIBS_PGSQL="$(pkgconf --libs libpq)" \
    AUXLIBS_SQLITE="$(pkgconf --libs sqlite3)" \
    AUXLIBS_CDB='-lcdb' \
    SHLIB_RPATH="-Wl,-rpath,/usr/lib/postfix ${LDFLAGS}" \
    OPT="${CFLAGS} ${CPPFLAGS} ${LDFLAGS}"

  make
}

package_postfix() {
  local _name _feature

  depends+=('db' 'libsasl' 'openssl' 'zlib' 'libicuuc.so' 'libnsl.so')
  optdepends=(
    'perl: for postfix-collate.pl, postfix-tlstype.pl and qshape'
    'postfix-cdb: for CDB integration'
    'postfix-ldap: for LDAP integration'
    'postfix-lmdb: for LMDB integration'
    'postfix-mysql: for MySQL integration'
    'postfix-pcre: for PCRE integration'
    'postfix-pgsql: for PostgreSQL integration'
    'postfix-sqlite: for SQLite integration'
  )
  conflicts=('smtp-server' 'smtp-forwarder')
  provides=('smtp-server' 'smtp-forwarder')
  backup=('etc/postfix/'{access,aliases,canonical,generic,header_checks,main.cf,master.cf,relocated,transport,virtual})
  install="${pkgbase}.install"

  cd "${pkgname}-${pkgver}"
  LD_LIBRARY_PATH="lib:$LD_LIBRARY_PATH" \
  sh postfix-install -non-interactive install_root="${pkgdir}"

  # additional man pages and scripts
  for _name in posttls-finger {smtp,qmqp}-{sink,source}; do
    install -vDm 644 "man/man1/${_name}.1" -t "${pkgdir}/usr/share/man/man1/"
    install -vDm 755 "bin/${_name}" -t "${pkgdir}/usr/bin/"
  done
  install -vDm 644 "man/man1/qshape.1" -t "${pkgdir}/usr/share/man/man1/"
  install -vDm 755 "auxiliary/qshape/qshape.pl" "${pkgdir}/usr/bin/qshape"
  install -vDm 755 "auxiliary/collate/collate.pl" "${pkgdir}/usr/bin/postfix-collate.pl"
  install -vDm 755 "auxiliary/collate/tlstype.pl" "${pkgdir}/usr/bin/postfix-tlstype.pl"
  install -vDm 644 "auxiliary/collate/README"* -t "${pkgdir}/usr/share/doc/${pkgname}/collate/"
  # license
  install -vDm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/"
  # systemd service
  install -vDm 644 "../${pkgname}.service" -t "${pkgdir}/usr/lib/systemd/system/"
  # sysusers.d
  install -vDm 644 "../${pkgname}.sysusers" "${pkgdir}/usr/lib/sysusers.d/${pkgname}.conf"
  # tmpfiles.d
  # NOTE: follows setup in conf/postfix-files
  install -vDm 644 "../${pkgname}.tmpfiles" "${pkgdir}/usr/lib/tmpfiles.d/${pkgname}.conf"

  # create dynamicmaps.cf.d/ and postfix-files.d/ entries for split packages
  # remove targetted files from main configuration files
  for _feature in {cdb,ldap,lmdb,mysql,pcre,pgsql,sqlite}; do
    grep "${pkgbase}-${_feature}" "${pkgdir}/etc/${pkgbase}/dynamicmaps.cf" > "dynamicmaps.cf.d/${pkgbase}-${_feature}.cf"
    sed -e "/${pkgbase}-${_feature}/d" -i "${pkgdir}/etc/${pkgbase}/dynamicmaps.cf"
    grep "${pkgbase}-${_feature}" "${pkgdir}/etc/${pkgbase}/${pkgbase}-files" > "${pkgbase}-files.d/${pkgbase}-${_feature}.cf"
    sed -e "/${pkgbase}-${_feature}/d" -i "${pkgdir}/etc/${pkgbase}/${pkgname}-files"
    grep "${_feature^^}_README:" "${pkgdir}/etc/${pkgbase}/${pkgbase}-files" >> "${pkgbase}-files.d/${pkgbase}-${_feature}.cf"
    sed -e "/${_feature^^}_README:/d" -i "${pkgdir}/etc/${pkgbase}/${pkgname}-files"
    if [[ "${_feature}" != cdb ]]; then
      grep "${_feature}_table.5:" "${pkgdir}/etc/${pkgbase}/${pkgbase}-files" >> "${pkgbase}-files.d/${pkgbase}-${_feature}.cf"
      sed -e "/${_feature}_table.5:/d" -i "${pkgdir}/etc/${pkgbase}/${pkgname}-files"
      # remove files, that are part of the split packages
      rm -vf "${pkgdir}/usr/share/man/man5/${_feature}_table.5"
    fi
    # remove files, that are part of the split packages
    rm -vf "${pkgdir}/usr/lib/${pkgbase}/${pkgbase}-${_feature}.so"
    rm -vf "${pkgdir}/usr/share/doc/${pkgbase}/${_feature^^}_README"
  done

  # remove non-reproducible file, that only lists what the build circumstances were
  rm -v "${pkgdir}/etc/${pkgname}/makedefs.out"
  sed -e '/makedefs/d' -i "${pkgdir}/etc/${pkgname}/${pkgname}-files"
}

package_postfix-cdb() {
  depends+=('postfix' 'libcdb.so')
  pkgdesc+=' (CDB integration)'

  cd "${pkgbase}-${pkgver}"
  install -vDm 755 lib/${pkgname}.so -t "${pkgdir}/usr/lib/${pkgbase}/"
  install -vDm 644 "dynamicmaps.cf.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/dynamicmaps.cf.d/"
  install -vDm 644 "${pkgbase}-files.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/${pkgbase}-files.d/"
  install -vDm 644 README_FILES/CDB_README -t "${pkgdir}/usr/share/doc/${pkgbase}/"
}

package_postfix-ldap() {
  depends+=('postfix' 'libldap')
  pkgdesc+=' (LDAP integration)'

  cd "${pkgbase}-${pkgver}"
  install -vDm 755 lib/${pkgname}.so -t "${pkgdir}/usr/lib/${pkgbase}/"
  install -vDm 644 "dynamicmaps.cf.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/dynamicmaps.cf.d/"
  install -vDm 644 "${pkgbase}-files.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/${pkgbase}-files.d/"
  install -vDm 644 man/man5/ldap_table.5 -t "${pkgdir}/usr/share/man/man5/"
  install -vDm 644 README_FILES/LDAP_README -t "${pkgdir}/usr/share/doc/${pkgbase}/"
}

package_postfix-lmdb() {
  depends+=('lmdb' 'postfix')
  pkgdesc+=' (LMDB integration)'

  cd "${pkgbase}-${pkgver}"
  install -vDm 755 lib/${pkgname}.so -t "${pkgdir}/usr/lib/${pkgbase}/"
  install -vDm 644 "dynamicmaps.cf.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/dynamicmaps.cf.d/"
  install -vDm 644 "${pkgbase}-files.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/${pkgbase}-files.d/"
  install -vDm 644 man/man5/lmdb_table.5 -t "${pkgdir}/usr/share/man/man5/"
  install -vDm 644 README_FILES/LMDB_README -t "${pkgdir}/usr/share/doc/${pkgbase}/"
}

package_postfix-mysql() {
  depends+=('postfix' 'libmariadb.so')
  pkgdesc+=' (MySQL integration)'

  cd "${pkgbase}-${pkgver}"
  install -vDm 755 lib/${pkgname}.so -t "${pkgdir}/usr/lib/${pkgbase}/"
  install -vDm 644 "dynamicmaps.cf.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/dynamicmaps.cf.d/"
  install -vDm 644 "${pkgbase}-files.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/${pkgbase}-files.d/"
  install -vDm 644 man/man5/mysql_table.5 -t "${pkgdir}/usr/share/man/man5/"
  install -vDm 644 README_FILES/MYSQL_README -t "${pkgdir}/usr/share/doc/${pkgbase}/"
}

package_postfix-pcre() {
  depends+=('pcre' 'postfix')
  pkgdesc+=' (PCRE integration)'

  cd "${pkgbase}-${pkgver}"
  install -vDm 755 lib/${pkgname}.so -t "${pkgdir}/usr/lib/${pkgbase}/"
  install -vDm 644 "dynamicmaps.cf.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/dynamicmaps.cf.d/"
  install -vDm 644 "${pkgbase}-files.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/${pkgbase}-files.d/"
  install -vDm 644 man/man5/pcre_table.5 -t "${pkgdir}/usr/share/man/man5/"
  install -vDm 644 README_FILES/PCRE_README -t "${pkgdir}/usr/share/doc/${pkgbase}/"
}

package_postfix-pgsql() {
  depends+=('postfix' 'libpq.so')
  pkgdesc+=' (PostgreSQL integration)'

  cd "${pkgbase}-${pkgver}"
  install -vDm 755 lib/${pkgname}.so -t "${pkgdir}/usr/lib/${pkgbase}/"
  install -vDm 644 "dynamicmaps.cf.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/dynamicmaps.cf.d/"
  install -vDm 644 "${pkgbase}-files.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/${pkgbase}-files.d/"
  install -vDm 644 man/man5/pgsql_table.5 -t "${pkgdir}/usr/share/man/man5/"
  install -vDm 644 README_FILES/PGSQL_README -t "${pkgdir}/usr/share/doc/${pkgbase}/"
}

package_postfix-sqlite() {
  depends+=('postfix' 'sqlite')
  pkgdesc+=' (SQLite integration)'

  cd "${pkgbase}-${pkgver}"
  install -vDm 755 lib/${pkgname}.so -t "${pkgdir}/usr/lib/${pkgbase}/"
  install -vDm 644 "dynamicmaps.cf.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/dynamicmaps.cf.d/"
  install -vDm 644 "${pkgbase}-files.d/${pkgname}.cf" -t "${pkgdir}/etc/${pkgbase}/${pkgbase}-files.d/"
  install -vDm 644 man/man5/sqlite_table.5 -t "${pkgdir}/usr/share/man/man5/"
  install -vDm 644 README_FILES/SQLITE_README -t "${pkgdir}/usr/share/doc/${pkgbase}/"
}
